package mvc.Model;

import java.io.Serializable;
import java.util.ArrayList;
import java.io.Serializable;

import java.io.*;

/**
 * Created with IntelliJ IDEA.
 * User: Anastasia
 * Date: 25.11.14
 * Time: 21:03
 * To change this template use File | Settings | File Templates.
 */
public class Model implements Serializable{

    private ArrayList <Employee> list;
    private ArrayList <Department> departments;
    
    public Model()
    {
        list = new ArrayList<Employee>() ;
        departments = new ArrayList<Department>();
    }

    public void setList(ArrayList<Employee> list)
    {
        this.list = list;
    }
    
    public ArrayList<Employee> getList()
    {
         return list;
    }

    public void setDepartments(ArrayList<Department> deps)
    {
        this.departments = deps;
    }

    public ArrayList<Department> getDepartments()
    {
        return departments;
    }

    public void addDepartment(Department dep)
    {
        //Department department = new Department(name,Chief);
        departments.add(dep);
    }

    public void addEmployee (Employee emp)
    {
        list.add(emp);
    }

    public Department getDepartmentById(int id)
    {
        return departments.get(id);
    }

    public void deleteEmployeeById(int id)
    {
        list.remove(id);
    }

    public Employee getEmployeeById(int id)
    {
        return list.get(id);
    }

    public void setEmployeeByIndex(int id, Employee emp)
    {
        list.set(id, emp) ;
    }

    public void printEmployee()
    {
        for(int i=0;i< list.size();i++)
        {       System.out.println("Номер сотрудника :"+ i);
        System.out.println("Имя сотрудника: ");
        System.out.println(list.get(i).getName());
        System.out.println("Отчество сотрудника: ");
        System.out.println(list.get(i).getSurname());
        System.out.println("Фамилия сотрудника: ");
        System.out.println(list.get(i).getLastName());
        System.out.println("Отдел сотрудника: ");
            if(list.get(i).getDepartment().getName()!=null)
            {
                System.out.println(list.get(i).getDepartment().getName());

                System.out.println("Начальник отдела: ");
                System.out.println(list.get(i).getDepartment().getEmployee().getName());
                System.out.println(list.get(i).getDepartment().getEmployee().getSurname());
                System.out.println(list.get(i).getDepartment().getEmployee().getLastName());
            }
            else{System.out.println("Сотрудник пока что без отдела");}
            
        System.out.println("Зарплата сотрудника: ");
        System.out.println(list.get(i).getPay());
        System.out.println("Телефон :");
        System.out.println(list.get(i).getPhoneNumber());
        }
    }

    public int getCount()
    {
        return list.size();
    }
    
    public int getCountOfDep()
    {
        return departments.size();
    }

    public void serializeList(File file) throws IOException
    {


        ObjectOutputStream out =new ObjectOutputStream(new FileOutputStream(file));
        out.writeObject(list);       // Этот метод сериализует иерархию объектов
        out.close();
    }

    public void serializeDepartments(File file) throws IOException
    {


        ObjectOutputStream out =new ObjectOutputStream(new FileOutputStream(file));
        out.writeObject(departments);       // Этот метод сериализует иерархию объектов
        out.close();
    }


   public  void loadList(File f) throws IOException, ClassNotFoundException {

        ObjectInputStream in =  new ObjectInputStream(new FileInputStream(f));
        list = (ArrayList<Employee>)in.readObject();   // Этот метод десериализует иерархию объектов
    }
    public  void loadDepartments(File f) throws IOException, ClassNotFoundException {

        ObjectInputStream in =  new ObjectInputStream(new FileInputStream(f));
        departments = (ArrayList<Department>)in.readObject();    // Этот метод десериализует иерархию объектов
    }
    public void printDepartments()
    {
        for(int i=0;i< departments.size();i++)
        {    System.out.println("Номер отдела :"+ i);
            System.out.println("Название отдела: ");
            System.out.println(departments.get(i).getName());
            if(departments.get(i).getEmployee()!= null)
            {
            System.out.println("Имя начальника: ");
            System.out.println(departments.get(i).getEmployee().getName());
            System.out.println("Отчество начальника: ");
            System.out.println(departments.get(i).getEmployee().getSurname());
            System.out.println("Фамилия начальника: ");
            System.out.println(departments.get(i).getEmployee().getLastName());
            System.out.println("Зарплата начальника: ");
            System.out.println(departments.get(i).getEmployee().getPay());
            System.out.println("Телефон :");
            System.out.println(departments.get(i).getEmployee().getPhoneNumber());
            }
        }
    }
}
